//引入user对象
var User = require('../models/user.js')
var Post = require('../models/post.js')
//引入处理文件的上传的模块multer
var multer=require('multer');

// 处理图片的上传，基本属于固定写法
var storage=multer.diskStorage({
    //这个是上传图片的地址
    destination:function (req,file,cb) {
        cb(null,'./public/img');
    },
    //上传到服务器上图片的名字
    filename:function (req,file,cb) {
        req.file = file;
        var name = req.session.user.name;
        if (file.mimetype == 'image/jpeg') {
            req.pictureurl = name + '.jpg';
        } else if (file.mimetype == 'image/png') {
            req.pictureurl = name + '.png';
        } else if (file.mimetype == 'image/gif') {
            req.pictureurl = name + '.gif';
        }
        cb(null,req.pictureurl);
    }
})
var upload=multer({storage:storage});


//加密模块
var crypto = require('crypto');

//处理各种路由
module.exports = function(app){

    //1.用户为登录时的首页请求处理
    app.get('/',(req, res) =>{
        res.render('index',{
            title:'首页'
        })
    });

    //2.footer下关于吾志的处理
    app.get('/wuzhi',(req, res) =>{
        res.render('wuzhi',{
            title:'关于吾志'
        })
    });

        //3.注册页面
        app.get('/regist',(req, res) =>{
            res.render('regist',{
                title:'注册界面'
            })
        });
        //注册行为
        app.post('/regist',(req, res) =>{
            var name=req.body.username;
            var password=req.body.password;
            var repassword=req.body.repassword;
            var email=req.body.email;
            var zhanghao=/[\u4e00-\u9fa5]/;
            var mima=/[\d]{5,15}/;
            //正则判断用户注册信息
            if(zhanghao.test(name)==false){
                req.flash('error','请输入正确的用户名');
                return res.redirect('back');
            }
            if(mima.test(password)==false){
                req.flash('error','密码不符合要求');
                return res.redirect('back');
            }
            if(name==''||password==''||repassword==''||email==''){
                req.flash('error','请填写正确的信息');
                return res.redirect('back');
            };
            if(password!=repassword){
                req.flash('error','密码不一致');
                return res.redirect('back');
            };
            var md5=crypto.createHash('md5');
            password=md5.update(password).digest('hex');
            //创建出新用户的信息
            var newUser=new User({
                name:name,
                password:password,
                email:email
            });
            User.get(name,function (err,user) {
                if(err){
                    req.flash('error',err);
                    return res.redirect('/');
                }
                if(user){
                    req.flash('error','用户名已存在');
                    return res.redirect('back');
                }
                newUser.save(function (err,user) {
                    if(err){
                        req.flash('error',err);
                        return res.redirect('back');
                    }
                    req.session.user=newUser;
                    req.flash('success','注册成功');
                    // 注册成功跳到写日记的页面，显示已经登录
                    res.redirect('/post');
                })
            })
        });

        //4.登录处理
        app.get('/login',(req, res) =>{
            res.render('login',{
                title:'登录'
            });
        });
        app.post('/login',(req, res) =>{
            var md5=crypto.createHash('md5');
            var password=md5.update(req.body.password).digest('hex');
            User.get(req.body.username,function (err,user) {
                if(!user){
                    req.flash('error','用户不存在');
                    return res.redirect('back');
                }
                if(user.password!=password){
                    req.flash('error','密码错误');
                    return res.redirect('back');
                }
                req.session.user=user;
                req.flash('success','登陆成功');
                res.redirect('/post');
            })
        });

       //5.退出
       app.get('/logout',(req, res) => {
        req.session.user=null;
        req.flash('success');
        res.redirect('/');
       });

    //6.用户已经登录的首页处理(要展示用户发表的文章，但是不能进行删除)
    app.get('/first',(req, res) =>{
        var page=parseInt(req.query.p)||1;
        Post.getFive(null,page,function (err,posts,total) {
            if(err){
                posts=[];
                return res.redirect('back');
            }
            res.render('first',{
                title:'首页',
                page:page,
                posts:posts,
                // 插件使用时需要的参数totalall，total
                total:total,
                totalall: parseInt(Math.ceil(parseFloat(total) / parseFloat(5))),
                isFirstPage:(page - 1)==0,
                isLastPage:(page -1) * 5 + posts.length == total
            })

        })
    });

    //7.相册页面
    app.get('/photo',(req, res) => {
        res.render('photo',{
            title:'此刻'
        })
    });


    //8.写日记页面
        app.get('/post',(req, res) =>{
          res.render('post',{
             title:'写日记',
             time:new Date().getFullYear()+'年'+(new Date().getMonth()+1) + '月' +new Date().getDate() + '日'
              });
          });
          app.post('/post',function(req,res){
              if(req.body.content==''){
                  req.flash('error','请记录下今天的趣事和心情吧！');
                  return res.redirect('/post');
              }
              var postuser=req.session.user;
              var post=new Post(postuser.name,req.body.content,req.pictureurl);
              post.save(function (err) {
                  if(err){
                      req.flash('error',err);
                  }
                  req.flash('success','发布成功');
                  res.redirect('/first');
              })
           });


//    9.我的主页页面（展示所有文章，能进行删除操作）
    app.get('/article',(req, res) =>{
        var page=parseInt(req.query.p)||1;
        Post.getFive(null,page,function (err,posts,total) {
            if(err){
                posts=[];
                return res.redirect('back');
            }
            res.render('article',{
                title:'首页',
                time:new Date().getFullYear()+'年'+(new Date().getMonth()+1) + '月' +new Date().getDate() + '日',
                page:page,
                posts:posts,
                total:total,
                totalall: parseInt(Math.ceil(parseFloat(total) / parseFloat(5))),
                isFirstPage:(page - 1)==0,
                isLastPage:(page -1) * 5 + posts.length == total
            })
        })
    });

    //10.删除文章
    app.get('/remove/:name/:time',(req, res) => {
        var currentUser = req.session.user;
        Post.remove(currentUser.name,req.params.time,function (err) {
            if(err){
                req.flash('error',err);
                return res.redirect('back');
            }
            res.redirect('/article');
        })
    })

//   11. 编辑文章
    app.get('/edit/:name/:time',(req, res) => {
        Post.edit(req.session.user.name,req.params.time,function (err,post) {
            if(err){
                req.flash('error',err);
                return res.redirect('back');
            };
            res.render('edit',{
                title:'文章编辑页面',
                post:post,
                time:new Date().getFullYear()+'年'+(new Date().getMonth()+1) + '月' +new Date().getDate() + '日'
            })
        })
    });
    //提交编辑的文章,
    app.post('/edit/:name/:time',(req, res) => {
        Post.update(req.params.name,req.params.time,req.body.content,function (err) {
            if(err){
                req.flash('error',err);
                return res.redirect('back');
            };
            //req.flash('success','文章修改成功');
            return res.redirect('/article');
        })
    });


//    12. 设置个人信息中的小红花
        app.get('/personal',(req, res) =>{
            //在post定义的时候有参数page，所以在这里必须写上
            var page=parseInt(req.query.p)||1;
            Post.getFive(null,page,function (err,posts) {
                if(err){
                    posts=[];
                    return res.redirect('back');
                }
                res.render('editpersonal',{
                    title:'小红花',
                    posts:posts
                })
            })
         });


    //13.处理个人信息
    app.post('/p',upload.single("perimg"),(req, res) => {
        if(req.body.sign==''||req.body.introduce==''){
            req.flash('error','签名和介绍一定要填写');
            return res.redirect('/personal');
        }
        User.edit(req.session.user.name,function (err,diffuser) {
            var diffuser=diffuser;
            if(req.body.sign==diffuser.sign&&req.body.introduce==diffuser.introduce){
                req.flash('error','没有对内容进行修改');
                return res.redirect('/personal');
            }
            req.session.user=diffuser;
            User.update(req.session.user.name,req.body.sign,req.body.introduce,function (err) {
                if(err){
                    req.flash('error',err);
                    return res.redirect('back');
                }
                 User.get(req.session.user.name,function (err,user) {
                            req.session.user =user;
                            res.redirect('/article');
                        })       
            });
        });
    });



    //14.处理头像的上传(点击后发送不了该请求）
    app.post('/tou',upload.single("perimg"),(req, res) => {
        User.edit(req.session.user.name,function (err,diffuser) {
            var diffuser=diffuser;
            if(req.pictureurl==diffuser.pictureurl){
                req.flash('error','没有上传头像');
                return res.redirect('/personal');
            }
            req.session.user=diffuser;
            User.updatePhoto(req.session.user.name,req.pictureurl,function (err) {
                if(err){
                    req.flash('error',err);
                    return res.redirect('back');
                }
                //头像上传成功后对post集合进行更新
                Post.updatePhoto(req.session.user.name, req.pictureurl, function (err) {
                    if(err){
                        console.log('修改资料出现错误');
                    } else {
                        User.get(req.session.user.name,function (err,user) {
                            req.session.user =user;
                            req.flash('success', '资料修改成功!');
                            res.redirect('/article');
                        })
                    }
                })
            })
        })

    });


};


